﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace H.Logs
{
    /// <summary>
    /// 日志工厂接口
    /// </summary>
    public interface ILoggerFactory : IFactory
    {
        /// <summary>
        /// 日志实例工厂
        /// </summary>
        /// <returns>返回当前应用程序域的日志收集器实例</returns>
        ILogCollector GetInstance();

        /// <summary>
        /// 创建一个在线日志监听器
        /// 注意需要手动调用<see cref="ILogCollector.AddListener"/>进行注册才能生效
        /// </summary>
        /// <param name="hostName">远程日志服务器的地址</param>
        /// <param name="port">远程日志服务器的端口</param>
        /// <param name="clientName">用于在远程服务器上分辨不同的日志实例</param>
        /// <returns>返回一个日志监听器实例</returns>
        ILogListener CreateWebLogListener(string hostName, int port, string clientName);

        /// <summary>
        /// 创建一个本地日志监听器
        /// 注意需要手动调用<see cref="ILogCollector.AddListener"/>进行注册才能生效
        /// </summary>
        /// <returns>返回一个日志监听器实例</returns>
        ILogListener CreateLocalLogListener();

        /// <summary>
        /// 创建一个将日志写到文件的监听器(日志文件需要使用LogViewer才能打开,否则会是乱码)
        /// 注意需要手动调用<see cref="ILogCollector.AddListener"/>进行注册才能生效
        /// </summary>
        /// <param name="filePrefix">文件的前缀,用于识别不同的APP的日志</param>
        /// <returns>返回一个日志监听器实例</returns>
        ILogListener CreateFileLogListener(string filePrefix);
    }
}
